package com.sikulifang.bank.simulation.service;

import cn.hutool.core.lang.Dict;
import com.sikulifang.bank.simulation.dto.ReceiptDTO;
import com.sikulifang.bank.simulation.dto.TransferPaymentDTO;
import com.sikulifang.bank.simulation.util.R;

import java.util.List;

public interface IBankMessage {

    /**
     * Description: 报文处理入口
     * <p>
     * Date: 2023年6月25日, 0025 15:28
     *
     * @param message 请求的报文
     * @return {@link String}
     */
    String inlet(String message);

    /**
     * Description: 转账交易的入口
     * <p>
     * Date: 2023年6月27日, 0027 18:25
     *
     * @param transferPaymentList 交易的信息
     * @return {@link R<Dict>}
     */
    R<Dict> tradingEntrance(List<TransferPaymentDTO> transferPaymentList);

    /**
     * 查询余额
     *
     * @param account 账号
     */
    R<Dict> queryBalance(String account);

    /**
     * 查询明细
     */
    R<Dict> queryDetail(Dict request);

    /**
     * Description: 自定义SQL查询
     * <p>
     * Date: 2023/5/30 14:54
     *
     * @param sql sql
     * @return {@link List <Object>}
     */
    List<Dict> query(String sql);

    /**
     * 获取银行的标识
     */
    String bankCode();

    /**
     * Description:  下载回单
     * <p>
     * Date: 2023/6/5 13:48
     */
    R<Dict> dowReceipt(List<ReceiptDTO> receiptList);

    /**
     * Description: 从报文里面获取接口的类型
     * <p>
     * Date: 2023年6月18日, 0018 14:21
     *
     * @param message 请求的报文
     * @return {@link String} 接口的类型
     */
    String getActionName(String message);

    /**
     * Description: 从报文里面获取接口的类型
     * <p>
     * Date: 2023年6月18日, 0018 14:21
     *
     * @param message 请求的报文
     * @return {@link String} 接口的类型
     */
    String getActionType(String message);

    /**
     * Description: 禁止访问时，（被限流）的响应报文
     * <p>
     * Date: 2023年6月18日, 0018 17:21
     *
     * @param body 响应提示
     * @return {@link String}
     */
    String prohibitAccess(String body);
}
